

#ifndef __MCU_H_
#define __MCU_H_




#include"stl_type.h"
#include"stl_deque.h"  // 串口用到双向队列


#define send_buffer_len   256   // 串口发生缓冲的大小

/// 串口的结构体，usb串口也可以当作串口
typedef struct _uart_
{
	int port;	   //端口号。
	unt32 baudrate;  //波特率
	Deque uart_u8buffer;  //接收缓存,队列的元素是u8类型。
	unt8 send_buffer[send_buffer_len];
}uart;


// 接口类型：普通io,adc,pwm,dac,8位并口，16位并口
typedef enum {
	GPIO_IO, GPIO_ADC, GPIO_PWM, GPIO_DAC, GPIO_P8, GPIO_P16,
}GPIO_type;

/// io口的结构体
typedef struct _gpio__
{
	GPIO_type type;  //引脚类型：0 普通io，1 adc，2 pwm，3 dac ...
}gpio;


//   下面定义一些应用层用到的软件接口   

extern uart uart0, uart1, uart2;

extern gpio gt_int, gt_rst, gt_sda, gt_scl;

extern unt8 receive_buf_uart0;
extern unt8 receive_buf_uart2;


// mcu外设初始化。
void mcu_init(void);

/// <summary>
/// 延时n毫秒，在mcu.c中实现。
/// </summary>
/// <param name="n">延时的毫秒数</param>
void mcu_delay_ms(unt32 n);

/// <summary>
/// 机器开机的时间，单位：毫秒。由定时器进行累加。
/// 用一个unt32来表示毫秒的计数，可以使用49天。
/// 一般也不会有人连续开机这么长时间。或者，在第48天的时候提示重启机器。
/// </summary>
/// <param name=""></param>
/// <returns>返回单片机开机到现在运行的时间</returns>
unt32 mcu_time_ms(void);


/// <summary>
/// 串口1发送一个字符串。以空字符'\0'作为字符串结束符。
/// </summary>
/// <param name="str">发送的字符串</param>
void mcu_uart_sendstring(uart* u, const char* str);

/// <summary>
/// 串口1发送字符串的前n各字符。
/// </summary>
/// <param name="str">发送的字符串</param>
/// <param name="n">字符的个数</param>
void mcu_uart_sendstring_(uart* u, const char* str, int n);


/// <summary>
/// 设置io口的输出值。在mcu.c中实现
/// 具体的实现方法和效果由用户自定义。如果是pwm口，则是设置占空比0-999。
/// </summary>
/// <param name="io">引脚号</param>
/// <param name="value">引脚值</param>
void mcu_set_io(gpio* io, unt32 value);

/// <summary>
/// 读取io口的值。在mcu.c中实现
/// 具体的实现方法和效果由用户自定义。如果是adc，则读出adc的值，如果是普通io，则是0，1的值。
/// </summary>
/// <param name="io">引脚号</param>
/// <returns>引脚值</returns>
unt32 mcu_read_io(gpio* io);

// 将io口设置成输出模式
void mcu_set_io_out(gpio* io);

// 将io口设置成输入模式
void mcu_set_io_in(gpio* io);



// 这里把所有头文件都包含进来，方便设备层调用

//
//#include"mcu_PPP.h"
//#include"mcu_os.h"
//#include"mcu_soft_pwm.h"
//#include"mcu_soft_iic.h"
//#include"mcu_soft_spi.h"
//#include"mcu_soft_sccb.h"


#endif // !__MCU_H_






